package main
import (
	"fmt"
	"os"
	"bufio"
	"io"
)
type CharCount struct{
	ChCount int  //英文个数
	NumCount int //数字个数
	SpaceCount int //空格个数
	OtherCount int //其他字符的个数
} 


//.统计文件的英文，数字，空格和其他字符
func main(){
	//思路：通过Reader来读取每一行，没读取一行就统计，并将结果保存到结构体中。
	filename := "d:/uploadfiles/testcount.txt"
	file,err := os.Open(filename)
	if err != nil {
		fmt.Println("文件打开失败！Error：",err)
		return
	}
	defer file.Close()
	var charcount CharCount
	reader := bufio.NewReader(file)
	for {
		str,err := reader.ReadString('\n')
		if err == io.EOF{
			break
		}
		//每读取一行就遍历一次
		for _,v := range str{
			fmt.Printf(" %c",v)
			switch{   //当作 if-elseif-else使用
			case v >= 'a' && v <= 'z' :
				fallthrough
			case v >= 'A' && v <= 'Z':
				charcount.ChCount++
			case v >= '0' && v <= '9':
				charcount.NumCount++
			case v == ' ' || v == '\t':
				charcount.SpaceCount++
			default:
				charcount.OtherCount++
			}
		}
	}
	fmt.Printf("英文字符个数：%v, 空格字符个数：%v, 数字字符个数：%v, 其他字符个数：%v",charcount.ChCount,charcount.SpaceCount,charcount.NumCount,charcount.OtherCount)
}